// 定义组件库枚举
// 组件库枚举，标识支持的组件库类型
import { naiveUiComponents } from '@/basic/common/naive-ui/componentList.ts';

/**
 * 基础组件类型
 */
export interface BaseComponent {
    component?: string; // 组件名称
    type?: string; // 组件类型，例如 'button', 'input'
    desc?: string;
    props?: Record<string, any>; // 公共的组件属性
    events?: Record<string, Function>; // 公共的事件绑定
    children?: BaseComponent[]; // 嵌套子组件
}
/**
 * 组件库枚举类型
 */
export enum ComponentLibrary {
    NAIVE_UI = 'naive-ui', // Naive UI 组件库
    ELEMENT_PLUS = 'element-plus', // Element Plus 组件库
    CUSTOM = 'custom', // 自定义组件库
}

/**
 * 组件库对应的所有组件列表
 * 每个组件库对应一个数组，存储该库的组件信息
 */
export const componentsAllLibrary: Record<ComponentLibrary, any[]> = {
    [ComponentLibrary.NAIVE_UI]: naiveUiComponents, // Naive UI 的组件列表
    [ComponentLibrary.ELEMENT_PLUS]: [], // Element Plus 的组件列表（待补充）
    [ComponentLibrary.CUSTOM]: [], // 自定义组件列表（待补充）
};

/**
 * 根据组件库获取组件列表
 * @param lib - 组件库枚举值
 * @returns 返回指定组件库的组件列表
 */
export function getComponentByLibrary(lib: ComponentLibrary): any[] {
    return componentsAllLibrary[lib] || [];
}

/**
 * 获取所有组件的完整列表
 * 将所有组件库的组件列表合并为一个数组
 * @returns 返回所有组件的列表
 */
export function getComponentList(): any[] {
    return Object.values(componentsAllLibrary).flat();
}
